package language_basic

/*
表达式：(a + b) * c
a,b,c叫做操作数
+，*，叫做运算符
*/

/*
算术运算符
+ - * / %(求余) ++ --
*/

func GetNums(a int, b int, c int) (d int, e int) {
	d = (a + b) * c
	d++
	e = (a + b) / c
	return d, e
}

/**
关系运算符
== != > < >= <=
*/

/**
逻辑运算符
运算符	描述
&&	逻辑与
||  逻辑或
!	逻辑非

*/

/**
位运算符
| A | B | A&B | A|B | A^B | | ---- | ---- | ---- | ---- | ---- | | 0 | 0 | 0 | 0 | 0 | | 0 | 1 | 0 | 1 | 1 | | 1 | 1 | 1 | 1 | 0 | | 1 | 0 | 0 | 1 | 1 |
这里最难理解的就是^了，只要认为AB两者都相同的时候，为0，其他都为1

假设A为60，B为13
运算	描述	示例
&	二进制与操作副本位的结果，如果它存在于两个操作数	(A & B) = 12, 也就是 0000 1100
\		二进制或操作副本，如果它存在一个操作数
^	二进制异或操作副本，如果它被设置在一个操作数就是按位取非	(A ^ B) = 49, 也就是 0011 0001
&^	二进制位清空&^	(A&^B)=48，也就是110000
<<	二进制左移位运算符。左边的操作数的值向左移动由右操作数指定的位数	A << 2 =240 也就是 1111 0000
二进制向右移位运算符。左边的操作数的值由右操作数指定的位数向右移动	A >> 2 = 15 也就是 0000 1111
*/

/**
赋值运算符

运算符	描述	示例
=	简单的赋值操作符，分配值从右边的操作数左侧的操作数	C = A + B 将分配A + B的值到C
+=	相加并赋值运算符，它增加了右操作数左操作数和分配结果左操作数	C += A 相当于 C = C + A
-=	减和赋值运算符，它减去右操作数从左侧的操作数和分配结果左操作数	C -= A 相当于 C = C - A
*=	乘法和赋值运算符，它乘以右边的操作数与左操作数和分配结果左操作数	C *= A 相当于 C = C * A
/=	除法赋值运算符，它把左操作数与右操作数和分配结果左操作数	C /= A 相当于 C = C / A
%=	模量和赋值运算符，它需要使用两个操作数的模量和分配结果左操作数	C %= A 相当于 C = C % A
<<=	左移位并赋值运算符	C <<= 2 相同于 C = C << 2
=	向右移位并赋值运算符	C >>= 2 相同于 C = C >> 2
&=	按位与赋值运算符	C &= 2 相同于 C = C & 2
^=	按位异或并赋值运算符	C ^= 2 相同于 C = C ^ 2
\=	按位或并赋值运算符

*/

/**

优先级运算符优先级


有些运算符拥有较高的优先级，二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级，由上至下代表优先级由高到低：
优先级	运算符
7	~ ! ++ --
6	* / % << >> & &^
5	+ - ^
4	== != < <= >= >
3	<-
2	&&
1	\
当然，你可以通过使用括号来临时提升某个表达式的整体运算优先级。

*/
